package pe.gob.mininter.dirandro.vaadin.panel.parte;

import java.text.MessageFormat;
import java.util.Date;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.transaction.annotation.Transactional;

import pe.gob.mininter.dirandro.model.Expediente;
import pe.gob.mininter.dirandro.model.Usuario;
import pe.gob.mininter.dirandro.service.ExpedienteService;
import pe.gob.mininter.dirandro.vaadin.dialogs.AlertDialog;
import pe.gob.mininter.dirandro.vaadin.util.Injector;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
import com.vaadin.ui.PopupDateField;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.VerticalLayout;

public class PanelRegistroAtestado extends CustomComponent {

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private VerticalLayout verticalLayout_1;
	@AutoGenerated
	private Button btnRegistrar;
	@AutoGenerated
	private TextArea txaObservacion;
	@AutoGenerated
	private PopupDateField dtFecGeneracion;
	@AutoGenerated
	private Label lblExpediente;
	private static final long serialVersionUID = 3695639106231295765L;
	
	private static final Logger logger = Logger.getLogger(PanelRegistroAtestado.class);
	
	private ExpedienteService expedienteService;
	private Expediente expediente;
	private Usuario usuario;
	
	public PanelRegistroAtestado() {
		buildMainLayout();
		setCompositionRoot(mainLayout);
		expedienteService = Injector.obtenerServicio(ExpedienteService.class);
		postConstruct();
	}

	private void postConstruct(){
		btnRegistrar.addListener(new ClickListener() {
			
			private static final long serialVersionUID = 4539783663387871432L;

			@Override
			public void buttonClick(ClickEvent event) {
				generarAtestado();
			}
		});
	}
	
	public void recibirExpediente(Expediente expedienteExterno, Usuario usuarioSesion) {
		String plantilla = "<p><b>Nro de Expediente:</b> {0} &nbsp;&nbsp; <b> Fecha del Registro:</b> {1} </p>";
		String html = MessageFormat.format(plantilla, expedienteExterno.getAutogenerado() , expedienteExterno.getFechaRegistro());
		lblExpediente.setValue(html);
		this.expediente = expedienteExterno;
		this.usuario = usuarioSesion;
	}
	
	@Transactional
	public void generarAtestado(){
		logger.debug("test>"+expediente.getAutogenerado());
		expediente.setNroAtestado("nro-001");
		expediente.setFechaAtestado((Date) dtFecGeneracion.getValue());
		expediente.setObsAtestado(txaObservacion.getValue() != null ? txaObservacion.getValue().toString() : StringUtils.EMPTY);
		expedienteService.actualizarAtestado(expediente, usuario);
				
		AlertDialog alertDialog = new  AlertDialog("Actualización de Pericia", "Se ha actualizaod la pericia correctamente", "Aceptar", "400");
		getApplication().getMainWindow().addWindow(alertDialog);
		getApplication().getMainWindow().removeWindow(getWindow());
		
	}
	
	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("100%");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("100.0%");
		
		// verticalLayout_1
		verticalLayout_1 = buildVerticalLayout_1();
		mainLayout.addComponent(verticalLayout_1);
		
		return mainLayout;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_1() {
		// common part: create layout
		verticalLayout_1 = new VerticalLayout();
		verticalLayout_1.setImmediate(false);
		verticalLayout_1.setWidth("500px");
		verticalLayout_1.setHeight("-1px");
		verticalLayout_1.setMargin(true);
		verticalLayout_1.setSpacing(true);
		
		// lblExpediente
		lblExpediente = new Label();
		lblExpediente.setImmediate(false);
		lblExpediente.setWidth("-1px");
		lblExpediente.setHeight("-1px");
		lblExpediente.setValue("Expediente : ");
		lblExpediente.setContentMode(3);
		verticalLayout_1.addComponent(lblExpediente);
		
		// dtFecGeneracion
		dtFecGeneracion = new PopupDateField();
		dtFecGeneracion.setCaption("Fecha de Generacion del Atestado");
		dtFecGeneracion.setImmediate(false);
		dtFecGeneracion.setWidth("200px");
		dtFecGeneracion.setHeight("-1px");
		dtFecGeneracion.setRequired(true);
		dtFecGeneracion.setResolution(4);
		verticalLayout_1.addComponent(dtFecGeneracion);
		
		// txaObservacion
		txaObservacion = new TextArea();
		txaObservacion.setCaption("Descripción del Atestado");
		txaObservacion.setImmediate(false);
		txaObservacion.setWidth("400px");
		txaObservacion.setHeight("-1px");
		txaObservacion.setInputPrompt("Descripción del Atestado");
		txaObservacion.setMaxLength(2000);
		verticalLayout_1.addComponent(txaObservacion);
		
		// btnRegistrar
		btnRegistrar = new Button();
		btnRegistrar.setCaption("Crear");
		btnRegistrar.setImmediate(true);
		btnRegistrar.setWidth("-1px");
		btnRegistrar.setHeight("-1px");
		verticalLayout_1.addComponent(btnRegistrar);
		verticalLayout_1.setComponentAlignment(btnRegistrar, new Alignment(48));
		
		return verticalLayout_1;
	}
}
